//
//  HomeViewController.swift
//  WeiBoSwift
//
//  Created by 吴斌 on 2022/9/20.
//

import UIKit

class HomeViewController: BaseViewController {
    // MARK: - 懒加载属性
    private lazy var titleBtn: TitleButton = TitleButton()
    // 注意:在闭包中如果使用当前对象的属性或者调用方法,也需要加self
    // 两个地方需要使用self: 1》如果在一个函数中出现歧义  2〉在闭包中使用当前对象的属性和方法也需要加self
    
    // [weak self]解决循环引用问题
    private lazy var popoverAnimator : PopoverAnimator = PopoverAnimator {[weak self] presented in
            self?.titleBtn.isSelected = presented
    }
    
    private lazy var viewModels : [StatusViewModel] = [StatusViewModel]()
    
    // MARK: - 系统回调函数
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        
        // 1.没有登录时设置的内容
        if !isLogin {
            visitorView.addRotationAnim()
            return
        }
        
        // 2.设置导航栏的内容
        setupNavigationBtn()
        
        // 3.获取数据
        loadStatuses()
        
        tableView.rowHeight = UITableView.automaticDimension
        tableView.estimatedRowHeight = 200
    }
    
    
   
}

// MARK: - 设置UI界面
extension HomeViewController {
    private func setupNavigationBtn() {
        // 自定义构造函数,代码简化
        navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "tabbar_icon_me")
        navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "tabbar_icon_all")
        
        // 设置titleView
        titleBtn.setTitle("测试", for: .normal)
        titleBtn.addTarget(self, action: #selector(titleBtnClick(titleBtn:)), for: .touchUpInside)
        navigationItem.titleView = titleBtn
        
    }
}

// MARK: - 事件监听
extension HomeViewController {
    @objc private func titleBtnClick(titleBtn: TitleButton) {
        // 1.改变按钮的状态
        titleBtn.isSelected = !titleBtn.isSelected
        
        // 2.创建弹出的控制器
        // PopoverViewController() 先从storyboard找控制器,没找到,找同名的xib文件,还没有找到则代码初始化控制器
        let popoverVc = PopoverViewController()
        
        // 3.设置控制器的modal样式 设置fullScreen则后面tabbar都会移除,故需要设置custom
        popoverVc.modalPresentationStyle = .custom
        
        // 4.设置转场代理
        popoverVc.transitioningDelegate = popoverAnimator
        popoverAnimator.presentedFrame = CGRect(x: 100, y: 100, width: 180, height: 250)
        
        self.present(popoverVc, animated: true, completion: nil)
        
    }
}

// MARK: - 请求数据
extension HomeViewController {
    private func loadStatuses() {
        NetworkTools.shareInstance.loadStatuses { result, error in
            // 1.错误校验
            if error != nil {
                print(error ?? "")
                return
            }
            
            // 2.获取可选类型中的数据
            guard let resultArray = result else {
                return
            }
            
            // 3.遍历微博对应的字典
            for statusDict in resultArray {
                let status = Status(dict: statusDict)
                let viewModel = StatusViewModel(status: status)
                self.viewModels.append(viewModel)
            }
            
            // 4.刷新表格
            self.tableView.reloadData()
        }
    }
}



// MARK: - tableView的数据源方法
extension HomeViewController {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return viewModels.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 1.创建cell
        let cell = tableView.dequeueReusableCell(withIdentifier: "HomeCellID") as! HomeViewCell
        
        // 2.给cell设置数据
        cell.viewModel = viewModels[indexPath.row]
        
        return cell
    }
}
